package com.linkgie.galaxyframework.security.application;

import java.io.Serializable;
import java.util.Map;
import java.util.Set;

/**
 * 应用功能特性配置；
 * <p>
 * 定义了树状的功能特性清单；
 * <p>
 * 
 * 注： {@link ApplicationFeatures} 是一个可序列化对象；
 * 
 * @author huanghaiquan
 *
 */
public interface ApplicationFeatures extends Serializable {

	/**
	 * 应用的唯一ID；
	 * <p>
	 * 这是应用获得授权的唯一ID；
	 * 
	 * <p>
	 * 注：当处于引擎独立运行状态下，由于缺少 application.profile ，应用 Id 为 null ；
	 * @return
	 */
	String getApplicationId();

	/**
	 * 应用的名称；
	 * 
	 * <p>
	 * 注：当处于引擎独立运行状态下，由于缺少 application.profile ，应用 Id 为 null ；
	 * @return
	 */
	String getApplicationName();

	/**
	 * 获取可访问的应用功能配置的名称；
	 * 
	 * @return
	 */
	Set<String> getProfileNames();

	/**
	 * 默认的应用功能配置名；
	 * 
	 * @return
	 */
	String getDefaultProfileName();

	/**
	 * 获取所有的功能配置列表；
	 * 
	 * @return
	 */
	Map<String, ProfileFeatures> getProfiles();

}
